import Sprite from './sprite';
import ImageManager from './image_manager.js';
/**
 * 带动画的物体基类
 * 用于显示具有帧动画的游戏对象
 * 由main.js的loop自动调用update方法更新帧
 */
export default class AnimatedObject extends Sprite {
  /**
   * 构造函数
   * @param {string} imgPrefix - 图片路径前缀
   * @param {number} frameCount - 动画总帧数
   * @param {number} width - 物体宽度
   * @param {number} height - 物体高度
   */
  constructor(imgPrefix, frameCount, width, height, frameInterval = 1, x = 0, y = 0) {
    super('', width, height,x,y);
    this.imgPrefix = imgPrefix;
    this.frameCount = frameCount;
    this.currentFrame = 0;
    this.frameInterval = frameInterval; // 每多少帧更新一次
    this.frameCounter = 0; // 帧计数器
    this.loop = true; // 是否循环播放
    this.isPlaying = true; // 是否正在播放
  }

  /**
   * 更新动画帧
   * 每次调用都会更新到下一帧
   */
  update() {
    if (!this.isPlaying) return;

    this.frameCounter++;

    // 达到指定帧数间隔才更新动画帧
    if (this.frameCounter > this.frameInterval) {
      this.currentFrame++;
      this.frameCounter = 0; // 重置计数器

      // 检查是否超出帧数范围
      if (this.currentFrame >= this.frameCount) {
        if (this.loop) {
          this.currentFrame = 0;
        } else {
          this.currentFrame = this.frameCount - 1;
          this.isPlaying = false;
        }
      }

      // 更新图片
      this.updateImage();
    }
  }

  /**
   * 更新图片
   * 优先使用预加载的资源
   */
  updateImage() {
    this.imgSrc = `${this.imgPrefix}${this.currentFrame}.png`;
    this.img=ImageManager.getImage(this.imgSrc);
  }

  /**
   * 播放动画
   * @param {boolean} loop - 是否循环播放
   */
  play(loop = true) {
    this.loop = loop;
    this.isPlaying = true;
  }

  /**
   * 停止动画
   */
  stop() {
    this.isPlaying = false;
  }

  /**
   * 重置动画
   */
  reset() {
    this.currentFrame = 0;
    this.frameCounter = 0;
    this.imgSrc = `${this.imgPrefix}${this.currentFrame}.png`;
    this.img.src = this.imgSrc;
  }

  /**
   * 设置帧更新间隔
   * @param {number} interval - 新的帧更新间隔
   */
  setFrameInterval(interval) {
    this.frameInterval = interval;
  }
}